#ifndef _EEPROM_H_
#define _EEPROM_H_

#include <stdio.h>
#include "i2c.h"

/**
 * @brief 向AT24C02写入一个字节
 * 
 * @param dataAddr 要写入的位置
 * @param data 要写入的值
 * @return uint32_t 0表示成功, 非0表示失败
 */
uint32_t EE_WriteByte(uint8_t dataAddr, uint8_t data);

/**
 * @brief 从AT24C02读取一个字节
 * 
 * @param dataAddr 要读取的位置
 * @param data 读取的数据存储位置指针
 * @return uint32_t 0表示成功, 非0表示失败
 */
uint32_t EE_ReadByte(uint8_t dataAddr, uint8_t *data);

/**
 * @brief 向AT24C02写入多个字节(页写入)
 * EEPROM(以及FLASH等), 内部地址是按页分布的
 * 写入时, 无法一次性跨页写入, 如果在当前页最后位置继续写
 * 会写入到当前页的开头位置
 * @param startAddr 
 * @param buf 
 * @param len 
 * @return uint32_t 
 */
uint32_t EE_WritePage(uint8_t startAddr, uint8_t *buf, uint8_t len);

/**
 * @brief 从AT24C02中连续读取多个字节(顺序读)
 * 读的时候可以跨页, EEPROM会自动将页进行推进
 * @param startAddr 
 * @param buf 
 * @param len 
 * @return uint32_t 
 */
uint32_t EE_ReadSequential(uint8_t startAddr, uint8_t *buf, uint16_t len);

#endif // _EEPROM_H_
